#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Instruments;
using Cephei.QL.Termstructures;
using Cephei.QL.Times;
using Cephei.QL;
namespace Cephei.QL.Pricingengines.Bond
{
     // <summary> 
	// ! See CashFlows for functions' documentation.  These adapters calls into CashFlows functions passing as input the Bond cashflows, the dirty price (i.e. npv) calculated from clean price, the bond settlement date (unless another date is given), zero ex-dividend days, and excluding any cashflow on the settlement date.  Prices are always clean, as per market convention.
	// </summary>
    [Guid ("6A48D5E1-563D-4e61-81FC-FE0C4AC49C5C"),ComVisible(true)]
	public interface IBondFunctions 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double AccruedAmount(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double AtmRate(Cephei.QL.Instruments.IBond bond, Cephei.QL.Termstructures.IYieldTermStructure discountCurve, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate, Microsoft.FSharp.Core.FSharpOption<Double> cleanPrice);
        
		 Double BasisPointValue(Cephei.QL.Instruments.IBond bond, Double yield, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double BasisPointValue(Cephei.QL.Instruments.IBond bond, Cephei.QL.IInterestRate yield, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double Bps(Cephei.QL.Instruments.IBond bond, Double yield, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double Bps(Cephei.QL.Instruments.IBond bond, Cephei.QL.IInterestRate yield, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double Bps(Cephei.QL.Instruments.IBond bond, Cephei.QL.Termstructures.IYieldTermStructure discountCurve, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double CleanPrice(Cephei.QL.Instruments.IBond bond, Cephei.QL.Termstructures.IYieldTermStructure discount, Double zSpread, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double CleanPrice(Cephei.QL.Instruments.IBond bond, Double yield, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double CleanPrice(Cephei.QL.Instruments.IBond bond, Cephei.QL.IInterestRate yield, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double CleanPrice(Cephei.QL.Instruments.IBond bond, Cephei.QL.Termstructures.IYieldTermStructure discountCurve, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double Convexity(Cephei.QL.Instruments.IBond bond, Double yield, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double Convexity(Cephei.QL.Instruments.IBond bond, Cephei.QL.IInterestRate yield, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double Duration(Cephei.QL.Instruments.IBond bond, Double yield, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<QL.Cashflows.Duration.TypeEnum> type, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double Duration(Cephei.QL.Instruments.IBond bond, Cephei.QL.IInterestRate yield, Microsoft.FSharp.Core.FSharpOption<QL.Cashflows.Duration.TypeEnum> type, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Boolean IsTradable(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 DateTime MaturityDate(Cephei.QL.Instruments.IBond bond);
        
		 Double NextCashFlowAmount(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> refDate);
        
		 DateTime NextCashFlowDate(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> refDate);
        
		 Double NextCouponRate(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double PreviousCashFlowAmount(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> refDate);
        
		 DateTime PreviousCashFlowDate(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> refDate);
        
		 Double PreviousCouponRate(Cephei.QL.Instruments.IBond bond, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 DateTime StartDate(Cephei.QL.Instruments.IBond bond);
        
		 Double Yield(Cephei.QL.Instruments.IBond bond, Double cleanPrice, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate, Microsoft.FSharp.Core.FSharpOption<Double> accuracy, Microsoft.FSharp.Core.FSharpOption<UInt64> maxIterations, Microsoft.FSharp.Core.FSharpOption<Double> guess);
        
		 Double YieldValueBasisPoint(Cephei.QL.Instruments.IBond bond, Double yield, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double YieldValueBasisPoint(Cephei.QL.Instruments.IBond bond, Cephei.QL.IInterestRate yield, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate);
        
		 Double ZSpread(Cephei.QL.Instruments.IBond bond, Double cleanPrice, Cephei.QL.Termstructures.IYieldTermStructure prm1, Cephei.QL.Times.IDayCounter dayCounter, QL.CompoundingEnum compounding, QL.Times.FrequencyEnum frequency, Microsoft.FSharp.Core.FSharpOption<DateTime> settlementDate, Microsoft.FSharp.Core.FSharpOption<Double> accuracy, Microsoft.FSharp.Core.FSharpOption<UInt64> maxIterations, Microsoft.FSharp.Core.FSharpOption<Double> guess);
    }

    // <summary> 
	// ! See CashFlows for functions' documentation.  These adapters calls into CashFlows functions passing as input the Bond cashflows, the dirty price (i.e. npv) calculated from clean price, the bond settlement date (unless another date is given), zero ex-dividend days, and excluding any cashflow on the settlement date.  Prices are always clean, as per market convention. Factory
	// </summary>
   	[ComVisible(true)]
    public interface IBondFunctions_Factory // : Collection_Factory<IBondFunctions, ICell<IBondFunctions>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
    }
}

